package gui

import (
	"github.com/rivo/tview"
)

type Gui2 struct {
	app  *tview.Application
	grid *tview.Grid
	rows []*tview.Flex // 保存每一行，方便删除
}

func NewGui2() *Gui2 {
	g := &Gui2{
		app:  tview.NewApplication(),
		grid: tview.NewGrid(),
		rows: []*tview.Flex{},
	}
	g.setupUI()
	return g
}

func (g *Gui2) setupUI() {
	// 设置 Grid 的布局
	g.grid.SetRows(0, 1).SetColumns(0, 0).SetBorders(false)

	// 初始化时添加一行
	g.addRow()

	// 创建并添加“新增”按钮
	addButton := tview.NewButton("新增").SetSelectedFunc(func() {
		g.addRow()
	})

	// 将“新增”按钮放到最后一行
	g.grid.AddItem(addButton, len(g.rows), 0, 1, 2, 0, 0, true)
}

func (g *Gui2) addRow() {
	// 创建新的 Flex 行，包含输入框和删除按钮
	row := tview.NewFlex().SetDirection(tview.FlexColumn)

	// 创建输入框
	inputField := tview.NewInputField()
	row.AddItem(inputField, 0, 1, true)

	// 创建删除按钮
	delButton := tview.NewButton("删除").SetSelectedFunc(func() {
		g.removeRow(row)
	})
	row.AddItem(delButton, 10, 1, false)

	// 记录行
	g.rows = append(g.rows, row)

	// 在 grid 中添加新行
	g.grid.RemoveItem(g.grid) // 清除之前的新增按钮
	g.grid.SetRows(len(g.rows), 1).AddItem(row, len(g.rows)-1, 0, 1, 2, 0, 0, false)

	// 重新添加新增按钮到最后一行
	addButton := tview.NewButton("新增").SetSelectedFunc(func() {
		g.addRow()
	})
	g.grid.AddItem(addButton, len(g.rows), 0, 1, 2, 0, 0, true)

	g.app.SetFocus(inputField) // 聚焦到新添加的输入框
}

func (g *Gui2) removeRow(row *tview.Flex) {
	// 找到要删除的行索引
	index := -1
	for i, r := range g.rows {
		if r == row {
			index = i
			break
		}
	}

	if index == -1 {
		return // 找不到就直接返回
	}

	// 删除行并重新布局
	g.rows = append(g.rows[:index], g.rows[index+1:]...)
	g.grid.Clear()

	for i, r := range g.rows {
		g.grid.AddItem(r, i, 0, 1, 2, 0, 0, false)
	}

	// 重新添加新增按钮到最后一行
	addButton := tview.NewButton("新增").SetSelectedFunc(func() {
		g.addRow()
	})
	g.grid.AddItem(addButton, len(g.rows), 0, 1, 2, 0, 0, true)
}

func Start() {
	gui := NewGui2()
	if err := gui.app.SetRoot(gui.grid, true).Run(); err != nil {
		panic(err)
	}
}
